/*
 * Copyright © 2021 Dowsure
 * https://www.dowsure.com/
 *
 * All rights reserved.
 */

package com.dowsure.apisaas.util.smalgorithm;

import org.bouncycastle.crypto.digests.SM3Digest;

import java.util.Arrays;

/**
 * 计算sm3 hash值
 * <p>若无特殊说明，接口接收的都是原始的二进制数据，被hex或者base64编码的数据，务必解码之后再传进来
 * @author
 */
public class SM3Util {


    /**
     * 计算hash值，在数据量不大时使用，数据量大应使用原生接口，分段计算sm3值
     * @param srcData 待计算hash值的数据
     * @return
     */
    public static byte[] hash(byte[] srcData) {
        SM3Digest digest = new SM3Digest();
        digest.update(srcData, 0, srcData.length);
        byte[] hash = new byte[digest.getDigestSize()];
        digest.doFinal(hash, 0);
        return hash;
    }

    /**
     * 校验sm3值，在数据量不大时使用，数据量大应使用原生接口，分段计算sm3值，然后校验
     * @param srcData 待验证的数据
     * @param sm3Hash 待验证的hash值
     * @return
     */
    public static boolean verifyHash(byte[] srcData, byte[] sm3Hash) {
        byte[] newHash = hash(srcData);
        if (Arrays.equals(newHash, sm3Hash)) {
            return true;
        } else {
            return false;
        }
    }
}
